/**
  ****************************(C) COPYRIGHT 2025 ROBOT-Z****************************
  * @file       chassis_behaviour.c/h
  * @brief      2025赛季哨兵，根据遥控器的值，决定底盘行为
  * @note
  * @history
  *  Version    Date            Author          Modification
  *  V1.0.0     Dec-26-2018     RM              1. 完成
  *  V1.1.0     Nov-11-2019     RM              1. 添加一些注释
  *  V2.0.0     Jan-1-2024      罗威昊           1. 添加小陀螺模式
  *  V3.0.0     Dec-20-2024     冉文治           1. 添加普通导航模式和变速小陀螺导航模式
  *
  @verbatim
  ==============================================================================
    如果要添加一个新的行为模式
    1.首先，在chassis_behaviour.h文件中， 添加一个新行为名字在 chassis_behaviour_e
    erum
    {
        ...
        ...
        CHASSIS_XXX_XXX, // 新添加的
    }chassis_behaviour_e,
    2. 实现一个新的函数 chassis_xxx_xxx_control(fp32 *vx, fp32 *vy, fp32 *wz, chassis_move_t * chassis )
        "vx,vy,wz" 参数是底盘运动控制输入量
        第一个参数: 'vx' 通常控制纵向移动,正值 前进， 负值 后退
        第二个参数: 'vy' 通常控制横向移动,正值 左移, 负值 右移
        第三个参数: 'wz' 可能是角度控制或者旋转速度控制
        在这个新的函数, 你能给 "vx","vy",and "wz" 赋值想要的速度参数
    3.  在"chassis_behaviour_mode_set"这个函数中，添加新的逻辑判断，给chassis_behaviour_mode赋值成CHASSIS_XXX_XXX
        在函数最后，添加"else if(chassis_behaviour_mode == CHASSIS_XXX_XXX)" ,然后选择一种底盘控制模式
    4.  在"chassis_behaviour_control_set" 函数的最后，添加
        else if(chassis_behaviour_mode == CHASSIS_XXX_XXX)
        {
            chassis_xxx_xxx_control(vx_set, vy_set, angle_set, chassis_move_rc_to_vector);
        }
  ==============================================================================
  @endverbatim
  ****************************(C) COPYRIGHT 2025 ROBOT-Z****************************
  */

#ifndef CHASSIS_BEHAVIOUR_H
#define CHASSIS_BEHAVIOUR_H

#include "main.h"
#include "chassis_task.h"
#include "remote_control.h"

typedef enum
{
	CHASSIS_ZERO_FORCE,						        // 底盘无力模式
	CHASSIS_NO_MOVE,						        // 底盘挂机
	CHASSIS_INFANTRY_FOLLOW_GIMBAL_YAW,		        // 底盘遥控
	CHASSIS_ROTATION_INFANTRY_FOLLOW_GIMBAL_YAW,	// 底盘小陀螺遥控
    CHASSIS_SENTINEL_FOLLOW_RADAR_YAW,				// 底盘正常导航
	CHASSIS_ROTATION_SENTINEL_FOLLOW_GIMBAL_YAW,	// 底盘小陀螺导航
} chassis_behaviour_e;

// 底盘行为模式变量
extern chassis_behaviour_e chassis_behaviour_mode;

/**
  * @brief          通过逻辑判断，赋值"chassis_behaviour_mode"成哪种模式
  * @param          chassis_move_mode: 底盘数据
  * @retval         none
  */
extern void chassis_behaviour_mode_set(chassis_move_t *chassis_move_mode);

/**
  * @brief          设置控制量.根据不同底盘控制模式，三个参数会控制不同运动.在这个函数里面，会调用不同的控制函数.
  * @param          vx_set 通常控制纵向移动.
  * @param          vy_set 通常控制横向移动.
  * @param          angle_set 通常控制旋转运动.
  * @param          chassis_move_rc_to_vector  包括底盘所有信息.
  * @retval         none
  */
extern void chassis_behaviour_control_set(fp32 *vx_set, fp32 *vy_set, fp32 *angle_set, chassis_move_t *chassis_move_rc_to_vector);

#endif
